﻿using ImageResizer.Properties;

namespace ImageResizer.Profiles
{
    /// <summary>
    /// Gère une profil de redimensionnement
    /// </summary>
    internal class ResizeProfile : Profile
    {
        /// <summary>
        /// CTOR
        /// </summary>
        /// <param name="name">le nom du profil</param>
        /// <param name="width">la largeur du redimensionnement</param>
        /// <param name="height">la hauteur du redimensionnement</param>
        /// <param name="isThumbnail">indique s'il s'agit d'une miniature (permet de travailler à partir des miniatures windows ou exif pour créer les fichiers, c'est bcp plus rapide)</param>
        public ResizeProfile(string name, string width, string height, bool isThumbnail)
            : base(name, width, height, isThumbnail)
        {
            KeepOriginalSize = false;
        }
    }

    /// <summary>
    /// Gère un faux profil de redimensionnement (ne redimensionne pas)
    /// </summary>
    internal class KeepSizeProfile : Profile
    {
        public KeepSizeProfile(string name)
            : base(name, "", "", false)
        {
            KeepOriginalSize = true;
        }
    }

    /// <summary>
    /// Container de profil de redimensionnement
    /// </summary>
    internal class Profile
    {
        #region Public properties
		/// <summary>
        /// Obtient le nom du profil
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// Obtient la largeur du profil
        /// </summary>
        public string Width { get; set; }

        /// <summary>
        /// Obtient la hauteur du profil
        /// </summary>
        public string Height { get; set; }

        /// <summary>
        /// Indique s'il s'agit d'un profil qui conserve les dimensions originales
        /// </summary>
        public bool KeepOriginalSize { get; protected set; }

        /// <summary>
        /// Indique si la sortie est une miniature (n'effectue pas un redimensionnement de l'image initiale, mais travaille à partir de la miniature existante (soit windows, soit exif)
        /// </summary>
        public bool IsThumbnail { get; protected set; }

	    #endregion

        #region CTOR

        /// <summary>
        /// Créé un noueau profil de redimensionnement
        /// </summary>
        /// <param name="name">le nom</param>
        /// <param name="width">la largeur</param>
        /// <param name="height">la hauteur</param>
        /// <param name="isThumbnail">indique s'il s'agit d'une miniature (permet de travailler à partir des miniatures windows ou exif pour créer les fichiers, c'est bcp plus rapide)</param>
        protected Profile(string name, string width, string height, bool isThumbnail)
        {
            Name = name;
            Width = width;
            Height = height;
            IsThumbnail = isThumbnail;
        }
    	#endregion

        #region Public methods
		/// <summary>
        /// Surcharge du ToString pour pouvoir être utilisé dans des contrôles type ComboBox
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            if (KeepOriginalSize)
                return Name + "(" + Resources.KeepSize + ")";
            return Name + " (" + Width + "x" + Height + ")";
        } 
	    #endregion
    }
}